package com.example.offer;

/**
 * 剑指 Offer 11. 旋转数组的最小数字
 * 把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。输入一个递增排序的数组的一个旋转，输出旋转数组的最小元素。例如，数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转，该数组的最小值为1。
 * <p>
 * 示例 1：
 * <p>
 * 输入：[3,4,5,1,2]
 * 输出：1
 * 示例 2：
 * <p>
 * 输入：[2,2,2,0,1]
 * 输出：0
 */
public class RotationArrayMinimum {
    public static void main(String[] args) {
        RotationArrayMinimum rotationArrayMinimum = new RotationArrayMinimum();
        System.out.println(rotationArrayMinimum.minArray(new int[]{3, 1}));
    }

    public int minArray(int[] numbers) {
        int n = numbers.length;
        int l = 0, r = n - 1;
        while (l < r) {
            //mid=(r-l)/2+l;一定要这么写，l-r会出现负数，很难搞
            int mid = (r - l) / 2 + l;
            if (numbers[mid] > numbers[r]) {
                l = mid + 1;
            } else if (numbers[mid] < numbers[r]) {
                r = mid;
            } else {
                r--;
            }
        }
        return numbers[l];
    }


}
